最近Spring boot真是越来越火了,所以就想学习并写一个Spring boot的系列文章。以前大家一说spring的时候,都会想到Spring mvc框架,但是Spring mvc配置文件真是太多啦,而且每一个项目配置文件的内容都是差不多的,配置起来真是太费劲了。

还好现在Spring boot框架火了起来,原因就是约定大于配置,多数 Spring Boot 应用只需要很少的 Spring 配置,搭建一个spring boot项目真的是几秒就可以,大大简化了配置文件的编写。缺点就是封装太多,自动化太强,不如Spring mvc那样易懂,文档略少,版本迭代速度很快,也证明了该框架目前很火的趋势。

说了这么多,那么spring boot都有哪些优点呢?让这么多人都爱不释手

一、Spring boot优点

  • 使用 Spring 项目引导页面可以在几秒构建一个项目
  • 方便对外输出各种形式的服务,如 REST API、WebSocket、Web、Streaming、Tasks
  • 非常简洁的安全策略集成
  • 支持关系数据库和非关系数据库
  • 支持运行期内嵌容器,如 Tomcat、Jetty
  • 强大的开发包,支持热启动
  • 自动管理依赖
  • 自带应用监控
  • 支持各种 IED,如 IntelliJ IDEA 、NetBeans
  • 使测试变的简单,如JUnit、Spring Test & Spring Boot Test
  • 强大的日志框架,如logback

有点说了这么多,还是得靠自己以后慢慢摸索,这里就当是先提个醒,接下来,我们来创建Spring boot项目

二、新建spring boot项目

1. 打开idea,选择新建项目,java要1.8版本以上

2. 配置项目名称,包名

3. 确定spring boot版本,选择依赖

4. 确定项目存放地址

5. 删除一些文件

6. 项目主目录

7. 设置application.properties

这个文件就是用来书写spring boot项目的配置信息的。

1
2
3
4
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/study?allowMultiQueries=true&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=root123

上述配置是配置了mysql相关的配置信息,说明:

  • driver:使用高版本的mysql-connector-java.jar,之前的配置com.mysql.cj.jdbc.Driver会被spring boot 2.1.0提示已被废弃,建议使用com.mysql.cj.jdbc.Driver。像本项目,使用的mysql-connector-java.jar版本就是8.0.13。(注:可在pom.xml文件内右键点击Mavenshow Effective POM中查看对应pom依赖的版本信息)
  • url:主要由主机+端口号+数据库拼凑而成,allowMultiQueries=true代表允许sql语句执行批量操作;serverTimezone=GMT%2B8代表时区–东八区,在mysql驱动高版本中必须得设置时区。
  • username:数据库账号
  • password:数据库密码

至此,spring boot项目的基本框架就搭建成功了。项目启动成功,如图所示:

三、运行一个demo

新建helloDemo.java文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping("hello")
public class helloDemo {

@RequestMapping("/info")
public Map<String, String> info() {
Map<String, String> map = new HashMap<>();
map.put("name", "JKL");
map.put("sex", "男");
return map;
}
}

@RestController Spring4 之后新加的注解,原来返回json需要@ResponseBody配合@Controller,现在一个顶俩

执行效果:

四、将application.properties替换为application.yml

1
2
3
4
5
6
7
8
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/company?allowMultiQueries=true&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=root123

server.port=8081
server.servlet.context-path=/spring-boot
# 项目访问路径为:http://localhost:8081/spring-boot

替换为:

1
2
3
4
5
6
7
8
9
10
11
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/company?allowMultiQueries=true&serverTimezone=GMT%2B8
username: root
password: root123
server:
port: 8081
servlet:
context-path: /spring-boot
# 项目访问路径为:http://localhost:8081/spring-boot

五、问题集锦

java.sql.SQLException: The server time zone value ‘Öйú±ê׼ʱ¼ä’ is unrecognized or represents more than one time zone.

报错截图:

问题分析:

这是由于mysql-connector-java.jar高版本所导致,高版本要求jdbc连接的url后面必须要有时区的设置。

解决办法:

在jdbc的url后面加上serverTimezone=GMT%2B8,即可解决问题。GMT%2B8代表时区东八区。

例如:spring.datasource.url=jdbc:mysql://localhost:3306/study?allowMultiQueries=true&serverTimezone=GMT%2B8